//
// Created by fairy on 2025/7/28.
//

#ifndef LCD_HPP
#define LCD_HPP
#include <cstdint>
#include <utility>

namespace bsp
{
    // 显示驱动概念
    template<typename T>
    concept LCDDriver = requires
    {
        { T::init() } -> std::same_as<void>; // 无参返回8位状态码
        {
            T::flush(std::declval<const int16_t>(), std::declval<const int16_t>(), std::declval<const int16_t>(),
                     std::declval<const int16_t>(), std::declval<uint8_t *>())
        } -> std::same_as<void>; // 无返回值
    };

    // 默认显示驱动（无操作）
    struct NoLCDDriver {
        static void init()
        {
            /*空实现*/
        }

        static bool flush(const int16_t, const int16_t, const int16_t, const int16_t, uint8_t *) { return false; }
        // 总是返回false
    };
}


#endif //LCD_HPP
